#!/bin/bash

# 脚本名称：find_root_partition_online.sh
# 功能说明：
# 本脚本用于查找当前运行系统的根文件系统所在分区。
# 主要流程包括：
# 1. 通过 mount 命令获取根文件系统的挂载分区。
# 2. 提供多种方法（grep、awk、sed、perl）解析 mount 输出。
# 3. 用户可以选择使用特定方法或测试所有方法。
#
# 注意事项：
# - 该脚本仅适用于在线系统，不适用于离线磁盘或虚拟磁盘镜像。
# - 需要 root 权限执行部分操作。

# 获取根分区的设备名称
get_root_partition() {
  case "$1" in
    grep) mount | grep 'on / ' | cut -d' ' -f1 ;;
    awk)  mount | awk '$3 == "/" {print $1}' ;;
    sed)  mount | sed -n 's|^\([^ ]*\) on / .*|\1|p' ;;
    perl) mount | perl -nle 'print $1 if /^([^ ]+) on \/ /' ;;
    *)
      echo "用法: $0 {grep|awk|sed|perl|all}" >&2
      return 1
      ;;
  esac
}

# 主函数
main() {
  if [[ "$1" == "all" || -z "$1" ]]; then
    echo "========= 获取根分区设备名称 ========="
    for method in grep awk sed perl; do
      echo "测试方法: $method"
      root_partition=$(get_root_partition "$method")

      if [[ -n "$root_partition" ]]; then
        echo "根分区 ($method): $root_partition"
      else
        echo "使用 $method 方法无法获取根分区" >&2
      fi
    done
  else
    get_root_partition "$1"
  fi
}

main "$1"
